Yarn Workspaces
個別のprojectにlibraryを追加する時
$ yarn workspace project-a add hoge
もしくは、
$ yarn workspace project-a add --dev hoge
普通にこれでもいい
$ cd project-a
$ yarn add hoge
GPT-4.icon
Workspaces の宣言方法
ルートの package.json に以下のように workspaces フィールドを追加します:
code:json
{
"workspaces": [
"packages/*"
]
}
これにより、packages/ ディレクトリ下のすべてのサブディレクトリがワークスペースになります。
Workspaces の便利機能一覧
Constraints(制約)
Eslintのように、パッケージごとのルール(例:依存のバージョン揃える、ライセンス情報の記述)を強制できます。
Cross-references(パッケージ間依存)
ワークスペース内の他パッケージに依存する際は、workspace: プロトコルを使います:
code:json
{
"dependencies": {
"@my-org/utils": "workspace:^"
}
}
この指定をしておくと、Yarnは自動的に同じモノレポ内のパッケージをリンクしてくれます。
workspace:^, workspace:~, workspace:* は公開時にどのバージョン指定に変換されるかを意味します(解決に影響しません)。
Focused Installs(対象パッケージだけインストール)
monorepo内の、1つのpackageのみを開発したいときに、そのpackageで使う分だけをinstallするということかmrsekut.icon
packages/appの依存のみをinstallする例
$ yarn workspaces focus packages/app
本番依存のみに絞る場合:
$ yarn workspaces focus -A --production
4. 🏃 Global Scripts(グローバルスクリプト)
スクリプト名に : が含まれていれば、どこからでも実行可能なグローバルスクリプトになります:
難しすぎるmrsekut.icon
code:json
"scripts": {
"build:all": "tsc -b"
}
複数のパッケージで同じスクリプト名を定義するとグローバルにならないので注意。
5. ⚡ Parallel execution(並列実行)
すべてのワークスペースで同じスクリプトを実行:
$ yarn workspaces foreach --all -pt npm publish
最近変更されたワークスペースだけで実行:
$ yarn workspaces foreach --since run lint
特定のパッケージとその依存のみ対象:
$ yarn workspaces foreach --from . -R run build